<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: #f00;
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>

<body>

    <div></div>

    <script>



        var oDiv = document.querySelector('div');

        // move(this , 'width' , 20 , 1000 , move(this , 'width' , 20 , 100)) ;  // 调用是错的，后面这个move不能调用


        // oDiv.onclick = function() {
        //     move(this , 'width' , 20 , 1000 , function() {
        //         // oDiv.style.width = '100px' ;
        //         move(oDiv , 'width' , 20 , 100)
        //     })
        // }

        // function fn() {
        //     move(oDiv , 'width' , 20 , 1000 , function() {
        //         move(oDiv , 'width' , 20 , 100 , function() {
        //             fn()
        //         }) ;
               
        //     })
        // }

        // fn()





        // 谁在动？
        // speed速度 
        // 哪个属性在动
        // 运动到什么地方  

        function move(ele, prop, speed, end, cb) {
            // 确定速度？  根据终点位置和起点位置的值
            var x = getCss(ele, prop);   // 样式获取到的是字符串
            x = parseInt(x);
            speed = end > x ? speed : -speed;
            var t = setInterval(function () {
                x += speed;
                ele.style[prop] = x + 'px';
                if (Math.abs(end - x) <= Math.abs(speed)) {
                    clearInterval(t);
                    // 到达终点
                    ele.style[prop] = end + 'px';

                    cb && cb();
                }
            }, 20)
        }



        // 获取样式
        function getCss(ele, prop) {
            if (getComputedStyle) {
                return getComputedStyle(ele)[prop]
            }
            return ele.currentStyle[prop]
        }

    </script>

</body>

</html>